Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

SUBSTRING (Валентин)
Author Message
Валентин
Guest





Карма: 388
   поощрить/наказать


PostPosted: Mon Oct 01, 2007 4:44 pm (написано за 2 секунды)
   Post subject: SUBSTRING
Reply with quote

Здраствуйте. Есть субд MySQL, таблица table, в ней поля release_active (tinyint 1 или 0), release_date (DATE типа 2007-08-23)
Нужно составить запрос, в котором:
в строке 2007-08-23, 08 будет не 08 а то, что мне надо (07 например) И
вместо 23 будет масимальное число (30-31 например) И
release_active = 1.

Пробую:
Code (SQL): скопировать код в буфер обмена
db_query("SELECT *, SUBSTRING(" . $month . ", 5, 2) AS release_date FROM table WHERE release_active = 1 ORDER BY release_date DESC LIMIT 1");
Запрос выполняется, но выводися явно не то. что не так?
Back to top
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Mon Oct 01, 2007 10:00 pm (спустя 5 часов 15 минут; написано за 40 секунд)
   Post subject:
Reply with quote

Валентин
раз Вам доступен PHP, то почему бы все преобразования не делать в PHP?
Back to top
View user's profile Send private message
jonjonson
Участник форума
Banned


Joined: 16 Sep 2004
Posts: 88
Карма: 1
   поощрить/наказать


PostPosted: Tue Oct 02, 2007 1:47 am (спустя 3 часа 47 минут; написано за 9 минут 31 секунду)
   Post subject:
Reply with quote

Валентин, что бы правильно написать запрос на SQL его нужно вначале правильно написать на русском.
Типа:
- поле release_date должно возвращать:
- первые пять символов от даты формата 'YYYY-MM-DD', а именно 'YYYY-';
- плюс два символа моего месяца;
- плюс три символа с восьмой позиции даты формата 'YYYY-MM-DD', а именно '-DD';
Подстроки от даты мы знаем как получить.
Code (SQL): скопировать код в буфер обмена
SUBSTRING(`table`.`release_date`, 1,5)
SUBSTRING(`table`.`release_date`, 8,3)
Роемся в остальных строковых функциях и находим, что подстроки можно соединить функцией CONCAT()
После этого собираем всё вместе
Code (php): скопировать код в буфер обмена
..."CONCAT(SUBSTRING(`table`.`release_date`, 1,5), '" . $month . "', SUBSTRING(`table`.`release_date`, 8,3)) AS release_date"...
Back to top
View user's profile Send private message
Валентин
Guest





Карма: 388
   поощрить/наказать


PostPosted: Tue Oct 02, 2007 6:25 am (спустя 4 часа 38 минут; написано за 1 минуту 59 секунд)
   Post subject:
Reply with quote

Тогда проще сделать примерно так, как предложил товарищMaus
Code (SQL): скопировать код в буфер обмена
WHERE release_date > '2007-08-01' AND release_date < '2007-09-01' ORDER BY release_date LIMIT 1
все даты формирует пхп.
вроде так
Back to top
jonjonson
Участник форума
Banned


Joined: 16 Sep 2004
Posts: 88
Карма: 1
   поощрить/наказать


PostPosted: Tue Oct 02, 2007 6:33 am (спустя 7 минут; написано за 2 минуты 6 секунд)
   Post subject:
Reply with quote

Тьфу, следующее условие не учёл
Quote:
вместо 23 будет масимальное число (30-31 например)
Но опять же нужно было догадаться по тексту, что нужно выбрать дату за период, а не изменить при выводе текущую :)
Back to top
View user's profile Send private message
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Tue Oct 02, 2007 7:18 pm (спустя 12 часов 44 минуты; написано за 2 минуты 24 секунды)
   Post subject:
Reply with quote

jonjonson wrote:
Тьфу, следующее условие не учёл
вот именно. Даже если это и можно - то неоправданно громоздко будет
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML